package com.cubetest;

import java.util.ArrayList;
import java.util.List;

import min3d.core.Object3dContainer;
import min3d.core.RendererActivity;
import min3d.parser.IParser;
import min3d.parser.Parser;
import min3d.vos.Light;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

public class CubeTestActivity extends RendererActivity {
	/** Called when the activity is first created. */
	/** Called when the activity is first created. */
	private Object3dContainer objModel, mazeModel, enemyTank, enemyTank1, bulletModel,
			leftModel, rightModel, enemyBullet, turretModel, dpad, wallModel, kapow, fire,
			wallModel1, wallModel2;
	float previousY = 0;
	boolean isTouch = false;
	float angle, angle1;
	int count = 0;

	float xValue, yValue;
	boolean state;

	private Object3dContainer[] bullets = new Object3dContainer[40];
	ArrayList<Object3dContainer> b = new ArrayList<Object3dContainer>();
	

	public void initScene() {

		scene.lights().add(new Light());
		scene.lights().add(new Light());

		Light myLight = new Light();
		myLight.position.setX(25);
		myLight.position.setY(0);
		myLight.position.setZ(30);
		scene.lights().add(myLight);

		IParser parser = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/newtank_obj", true);
		parser.parse();

		objModel = parser.getParsedObject();
		objModel.scale().x = objModel.scale().y = objModel.scale().z = .007f;
		objModel.rotation().y = 90f;
		objModel.position().y = 1f;
		objModel.position().z = 1.3f;

		IParser parser1 = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/newmaze1_obj", true);
		parser1.parse();

		mazeModel = parser1.getParsedObject();
		mazeModel.scale().y = mazeModel.scale().z = .01f;
		mazeModel.scale().x = .01f;
		mazeModel.position().x = 1f;

		IParser parserKapow = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/kapow_obj", true);
		parserKapow.parse();

		kapow = parserKapow.getParsedObject();
		kapow.scale().x = kapow.scale().y = kapow.scale().z = .015f;
		
		kapow.position().x = 1f;
		
		IParser parserFire = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/fire_obj", true);
		parserFire.parse();
		fire = parserFire.getParsedObject();
		fire.scale().x = fire.scale().y = fire.scale().z = .015f;
		fire.rotation().x = -45f;
		fire.position().x = 1.8f;
		fire.position().y = 1f;
		fire.position().z = 2.6f;
		
		
		IParser parserDpad = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/dpad_obj", true);
		parserDpad.parse();

		dpad = parserDpad.getParsedObject();
		dpad.scale().x = dpad.scale().y = dpad.scale().z = .02f;
		
		
		dpad.rotation().x = -45f;
		dpad.position().x = -1.6f;
		dpad.position().y = 1f;
		dpad.position().z = 2.6f;
		
		
		IParser parserx = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/bullet_obj", true);
		parserx.parse();

		bulletModel = parserx.getParsedObject();
		bulletModel.scale().x = bulletModel.scale().y = bulletModel.scale().z = 0.009f;
		bulletModel.position().y = 1f;
		bulletModel.position().z = 2.8f;

		// for(int i= 0; i<15; i++){
		/*
		 * bullets[i] = parserx.getParsedObject(); bullets[i].scale().x =
		 * bullets[i].scale().y = bullets[i].scale().z = 0.0009f;
		 * bullets[i].position().y = 1f; bullets[i].position().z = 2.5f;
		 */

		b.add(bulletModel);
		
		// }

		IParser parsert = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/bullet_obj", true);
		parsert.parse();

		enemyBullet = parsert.getParsedObject();
		enemyBullet.scale().x = enemyBullet.scale().y = enemyBullet.scale().z = 0.0009f;
		/*enemyBullet.position().x = enemyTank.position().x;
		enemyBullet.position().y = enemyTank.position().y;
		enemyBullet.position().z = enemyTank.position().z;*/

		IParser parser2 = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/newtank_obj", true);
		parser2.parse();
		
		IParser parser2x = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/newtank_obj", true);
		parser2x.parse();

		enemyTank1 = parser2x.getParsedObject();
		enemyTank1.scale().x = enemyTank1.scale().y = enemyTank1.scale().z = 0.007f;
		enemyTank1.position().x = -0.4f;
		enemyTank1.position().y = 1f;
		enemyTank1.position().z = -0.7f;
		//enemyTank1.rotation().y = -90f;
		
		enemyTank = parser2.getParsedObject();
		enemyTank.scale().x = enemyTank.scale().y = enemyTank.scale().z = 0.007f;
		enemyTank.position().x = 1f;
		enemyTank.position().y = 1f;
		enemyTank.position().z = -0.5f;
		//enemyTank.rotation().y = 90f;

	
		/*IParser parser5 = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/turret_obj", true);
		parser5.parse();

		turretModel = parser5.getParsedObject();
		turretModel.scale().x = turretModel.scale().y = turretModel.scale().z = .008f;
		turretModel.rotation().y = 90f;
		turretModel.position().y = 1f;
		turretModel.position().z = 2.3f;*/

		IParser parser6 = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/dice_obj", true);
		parser6.parse();

		wallModel = parser6.getParsedObject();

		wallModel.scale().x = wallModel.scale().y = wallModel.scale().z = 0.2f;
		wallModel.position().y = 1f;

		IParser parser7 = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/dice_obj", true);
		parser7.parse();

		wallModel1 = parser7.getParsedObject();
		wallModel1.scale().x = wallModel1.scale().y = wallModel1.scale().z = 0.2f;
		wallModel1.position().y = 1f;
		wallModel1.position().x = 1.5f;
		wallModel1.position().z = 1.2f;

		IParser parser8 = Parser.createParser(Parser.Type.OBJ, getResources(),
				"com.cubetest:raw/dice_obj", true);
		parser8.parse();
		wallModel2 = parser8.getParsedObject();
		wallModel2.scale().x = wallModel2.scale().y = wallModel2.scale().z = 0.2f;
		wallModel2.position().y = 1f;
		wallModel2.position().x = -1.0f;
		wallModel2.position().z = 1.2f;

		// scene.addChild(turretModel);
		scene.addChild(mazeModel);
		scene.addChild(enemyTank);
		scene.addChild(enemyTank1);
		scene.addChild(dpad);
		//scene.addChild(fire);
		// scene.addChild(leftModel);
		// scene.addChild(rightModel);
		// scene.addChild(enemyBullet);

		scene.addChild(objModel);
		//scene.addChild(wallModel);
		scene.addChild(wallModel1);
		scene.addChild(wallModel2);

		// scene.camera().position.x = 15f;
		scene.camera().position.y = 5f;
		// scene.camera().position.z = 15.0f;

	}

	public void updateScene() {
		
		float distZ; 
		distZ = Math.abs(objModel.position().z-enemyTank.position().z);
		
		float xDist = (objModel.position().x - enemyTank.position().x);
		float zDist = (objModel.position().z - enemyTank.position().z);
		
		float xDist1 = (objModel.position().x - enemyTank1.position().x);
		float zDist1= (objModel.position().z - enemyTank1.position().z);
		
		float a1 = (float) Math.atan2(xDist, zDist);
		a1 = (float) (a1*180 / 3.14) ;
		
		float a2 = (float) Math.atan2(xDist1, zDist1);
		a2 = (float) (a2*180 / 3.14) ;
		
		scene.removeChild(kapow);
		
		
		// glSurfaceView.objModel.rotation().x++;
		// objModel.rotation().z++;
		// objModel.rotation().y++;
		// objModel.rotation().z++;// = 2.5f;
		// mazeModel.position().z+=0.05;
		enemyTank.position().z -= (enemyTank.position().z
				- objModel.position().z + 0.1f) / 300;
		enemyTank.position().x -= (enemyTank.position().x
				- objModel.position().x + 0.1f) / 300;
		
		enemyTank.rotation().y = a1 - 90;
		
		enemyTank1.position().z -= (enemyTank1.position().z
				- objModel.position().z + 0.1f) / 1000;
		enemyTank1.position().x -= (enemyTank1.position().x
				- objModel.position().x + 0.1f) / 1000;
		
		enemyTank1.rotation().y = a2 - 90;
		/*
		 * angle1 = (float)
		 * Math.atan2(enemyTank.position().z-objModel.position().z,
		 * enemyTank.position().x-objModel.position().x); angle1*= 180/3.14;
		 */
		// enemyTank.rotation().y = angle*-1;
		// enemyTank.position().x-=0.004;
		// enemyBullet.position().x -= 0.004;
		// enemyBullet.position().z += 0.02;

		// scene.removeChild(bulletModel);

		
		  if((b.get(count).position().z <= enemyTank.position().z+0.25f && b.get(count).position().z >= enemyTank.position().z-0.25f)
				  && b.get(count).position().x <= enemyTank.position().x+0.25f && b.get(count).position().x >= enemyTank.position().x-0.25f)
		  {
			  scene.removeChild(enemyTank); 
			  
			  kapow.position().x = enemyTank.position().x;
              kapow.position().y = enemyTank.position().y;
              kapow.position().z = enemyTank.position().z;
              scene.addChild(kapow);
			  enemyTank.position().z = -2.5f;
			  
			  scene.removeChild(b.get(count)); b.remove(count);
			  //bulletModel.position().x = objModel.position().x;
			  bulletModel.position().z = objModel.position().z;
			  b.add(bulletModel); 
			  
			  
		  }
		  
		  if((b.get(count).position().z <= enemyTank1.position().z+0.25f && b.get(count).position().z >= enemyTank1.position().z-0.25f)
				  && b.get(count).position().x <= enemyTank1.position().x+0.25f && b.get(count).position().x >= enemyTank1.position().x-0.25f){
		  
		  
		  scene.removeChild(enemyTank1);
		  kapow.position().x = enemyTank1.position().x;
          kapow.position().y = enemyTank1.position().y;
          kapow.position().z = enemyTank1.position().z;
          scene.addChild(kapow);
		  enemyTank1.position().z = -2.5f;
		  //scene.removeChild(bulletModel);
		  //scene.removeChild(bullets[count]);
		  
		  scene.removeChild(b.get(count)); b.remove(count);
		  //bulletModel.position().x = objModel.position().x;
		  bulletModel.position().z = objModel.position().z;
		  b.add(bulletModel); 
		  scene.addChild(kapow);
		 }
		 

		// objModel.rotation().y+=1;
		// objModel.rotation().y-=2;
		// scene.camera().position.z += 0.01;
		// scene.camera().position.x++;//= 0.5f;
		// scene.camera().position.z+=0.03;//= 3.0f;
		// scene.camera().position.z-=0.3;//= 2.0f;
		// scene.addChild(mazeModel);
		/*int step1 = 0;
		while (step1 <= 50 && distZ<=0.1f) {
			step1++;
			// bulletModel.position().x = objModel.position().x;
			// bulletModel.position().z -= 0.08f;
			// bullets[count].position().x = objModel.position().x;
			// bullets[count].position().z -= 0.08f;
			// bulletModel.position().z -= 0.17f;
			// b.get(count).position().x = objModel.position().x;
			// b.get(count).position().z = objModel.position().z;
			// b.get(count).rotation().y = objModel.rotation().y + 90;
			// b.get(count).position().z -=0.09f;
			//eb.get(count).position().x += xValue * 2.5f;
			eb.get(count).position().z -= 0.1f;

		}*/

		if (isTouch) {
			int step = 0;
			// count++;
			// scene.addChild(bullets[count]);
			// scene.addChild(bulletModel);
			scene.addChild(b.get(count));
		//	scene.addChild(eb.get(count));
			// b.get(count).position().z = objModel.position().z;

			while (step <= 50) {
				step++;
				// bulletModel.position().x = objModel.position().x;
				// bulletModel.position().z -= 0.08f;
				// bullets[count].position().x = objModel.position().x;
				// bullets[count].position().z -= 0.08f;
				// bulletModel.position().z -= 0.17f;
				// b.get(count).position().x = objModel.position().x;
				// b.get(count).position().z = objModel.position().z;
				// b.get(count).rotation().y = objModel.rotation().y + 90;
				// b.get(count).position().z -=0.09f;
				b.get(count).position().x += xValue * 2.5f;
				b.get(count).position().z -= yValue * 2.5f;

			}
			
			// scene.removeChild(bulletModel);
			isTouch = false;
			// b.add(bulletModel);

		}

	}

	@Override
	/*
	 * public boolean onTouchEvent(MotionEvent event){
	 * 
	 * int nums = event.getPointerCount(); for(int i=0; i<nums; i++){
	 * 
	 * float x1 = event.getX(i); float y1 = event.getY(i);
	 * 
	 * Log.d("touch", "touch at "+x1+" and "+y1);
	 * 
	 * } float x = event.getX(); float y = event.getY();
	 * 
	 * float num = y - objModel.position().y; float den = x -
	 * objModel.position().x;
	 * 
	 * angle = (float) Math.atan2(num, den); //angle *= (180 /3.14);
	 * 
	 * if(x >= 705 && x<= 785 && y>= 0 && y<=480){ objModel.position().x +=
	 * 0.1f; if(objModel.position().x >= 1.5f) objModel.position().x = 1.5f;
	 * turretModel.position().x = objModel.position().x; }
	 * 
	 * else if(x >= 5 && x<= 85 && y>= 0 && y<=480){ objModel.position().x -=
	 * 0.1f; if(objModel.position().x <= -1.5f) objModel.position().x = -1.5f;
	 * turretModel.position().x = objModel.position().x; } else{ isTouch = true;
	 * } if(x <= 400){ previousY = Math.abs(180 - y); if(previousY <= 90){
	 * //previousY = Math.abs(180 - y); objModel.rotation().y = 90 + previousY;
	 * } else{ //previousY = Math.abs(180-y); objModel.rotation().y = previousY;
	 * }
	 * 
	 * 
	 * 
	 * } else{
	 * 
	 * previousY = Math.abs(180 - y); if(previousY <= 90){
	 * 
	 * objModel.rotation().y = Math.abs(90 - previousY); } else{ //previousY =
	 * Math.abs(180-y); objModel.rotation().y = -previousY + 90; }
	 * 
	 * 
	 * }
	 * 
	 * 
	 * 
	 * //objModel.rotation().y = 90 + previousY;
	 * 
	 * 
	 * return true;
	 * 
	 * }
	 */
	public boolean onTouchEvent(MotionEvent event) {

		float x = event.getX();
		float y = event.getY();

		// float num = y - objModel.position().y;
		// float den = x - objModel.position().x;

		// if(x >= 705 && x<= 785 && y>= 0 && y<=480){
		// objModel.position().x += 0.1f;
		// if(objModel.position().x >= 1.5f) objModel.position().x = 1.5f;
		// }

		// else if(x >= 5 && x<= 85 && y>= 0 && y<=480){
		// objModel.position().x -= 0.1f;
		// if(objModel.position().x <= -1.5f) objModel.position().x = -1.5f;
		// }

		if (x >= 0 && x <= 200 && y >= 280 && y <= 480) {

			float xx = (x - 100) / 4000;
			float yy = (y - 380) / -4000;

			xValue = xx;
			yValue = yy;

			angle = (float) Math.atan2(yy, xx);
			angle *= (180 / 3.14);

			objModel.position().x += xx;
			//turretModel.position().x = objModel.position().x;
			b.get(count).position().x = objModel.position().x;
			//eb.get(count).position().x = enemyTank.position().x;
			
			objModel.position().z -= yy;
			//turretModel.position().z = objModel.position().z;
			b.get(count).position().z = objModel.position().z;
			//eb.get(count).position().z = enemyTank.position().z;

			objModel.rotation().y = angle;
			//turretModel.rotation().y = objModel.rotation().y;
			//b.get(count).rotation().y = objModel.rotation().y + 90;
			//eb.get(count).position().y = enemyTank.position().y;
			
			if (objModel.position().x <= -1.3f) {
				objModel.position().x = -1.3f;

			}

			if (objModel.position().x >= 2.3f) {
				objModel.position().x = 2.3f;

			}

			if (objModel.position().z <= 1.8f && objModel.position().z >= 1.1f) {
				if (objModel.position().x <= -0.6f
						&& objModel.position().x >= -1.5f) {

					if (objModel.position().z >= 1.1f) {
						objModel.position().z -= 0.1f;
						objModel.position().x += 0.1f;
					} else if (objModel.position().z <= 1.8f) {
						objModel.position().z += 0.1f;
						objModel.position().x -= 0.1f;
					} else if (objModel.position().x <= -0.5f) {
						objModel.position().z -= 0.1f;
						objModel.position().x -= 0.1f;
					} else if (objModel.position().x >= -1.5f) {
						objModel.position().z += 0.1f;
						objModel.position().x += 0.1f;
					}

				} else if (objModel.position().x >= 1.1f
						&& objModel.position().x <= 1.8f) {

					if (objModel.position().z >= 1.1f) {
						objModel.position().z -= 0.08f;
						objModel.position().x -= 0.081f;
					} else if (objModel.position().z <= 1.8f) {
						objModel.position().z += 0.1f;
						objModel.position().x -= 0.1f;
					} else if (objModel.position().x >= 1.1f) {
						objModel.position().z += 0.1f;
						// objModel.position().x -= 0.1f;
					} else if (objModel.position().x <= 1.8f) {
						objModel.position().z += 0.1f;
						// objModel.position().x -= 0.1f;
					}

				}
			}

			if (enemyTank1.position().x <= -1.3f) {
				enemyTank1.position().x = -1.3f;
				
			}

			if (enemyTank1.position().x >= 2.3f) {
				enemyTank1.position().x = 2.3f;
			}
			
			if (enemyTank1.position().z <= 1.8f
					&& enemyTank1.position().z >= 1.1f) {
				if (enemyTank1.position().x <= -0.6f
						&& enemyTank1.position().x >= -1.5f) {

					if (enemyTank1.position().z >= 1.1f) {
						enemyTank1.position().z -= 0.1f;
						enemyTank1.position().x += 0.1f;
					} else if (enemyTank1.position().z <= 1.8f) {
						enemyTank1.position().z += 0.1f;
						enemyTank1.position().x -= 0.1f;
					} else if (enemyTank1.position().x <= -0.5f) {
						enemyTank1.position().z -= 0.1f;
						enemyTank1.position().x -= 0.1f;
					} else if (enemyTank1.position().x >= -1.5f) {
						enemyTank1.position().z += 0.1f;
						enemyTank1.position().x += 0.1f;
					}

				} else if (enemyTank1.position().x >= 1.1f
						&& enemyTank1.position().x <= 1.8f) {

					if (enemyTank1.position().z >= 1.1f) {
						enemyTank1.position().z -= 0.08f;
						enemyTank1.position().x -= 0.081f;
					} else if (enemyTank1.position().z <= 1.8f) {
						enemyTank1.position().z += 0.1f;
						enemyTank1.position().x -= 0.1f;
					} else if (enemyTank1.position().x >= 1.1f) {
						enemyTank1.position().z += 0.1f;
						// objModel.position().x -= 0.1f;
					} else if (enemyTank1.position().x <= 1.8f) {
						enemyTank1.position().z += 0.1f;
						// objModel.position().x -= 0.1f;
					}

				}
			}
			
			if (enemyTank.position().x <= -1.3f) {
				enemyTank.position().x = -1.3f;
				
			}

			if (enemyTank.position().x >= 2.3f) {
				enemyTank.position().x = 2.3f;
			}
			
			if (enemyTank.position().z <= 1.8f
					&& enemyTank.position().z >= 1.1f) {
				if (enemyTank.position().x <= -0.6f
						&& enemyTank.position().x >= -1.5f) {

					if (enemyTank.position().z >= 1.1f) {
						enemyTank.position().z -= 0.1f;
						enemyTank.position().x += 0.1f;
					} else if (enemyTank.position().z <= 1.8f) {
						enemyTank.position().z += 0.1f;
						enemyTank.position().x -= 0.1f;
					} else if (enemyTank.position().x <= -0.5f) {
						enemyTank.position().z -= 0.1f;
						enemyTank.position().x -= 0.1f;
					} else if (enemyTank.position().x >= -1.5f) {
						enemyTank.position().z += 0.1f;
						enemyTank.position().x += 0.1f;
					}

				} else if (enemyTank.position().x >= 1.1f
						&& enemyTank.position().x <= 1.8f) {

					if (enemyTank.position().z >= 1.1f) {
						enemyTank.position().z -= 0.08f;
						enemyTank.position().x -= 0.081f;
					} else if (enemyTank.position().z <= 1.8f) {
						enemyTank.position().z += 0.1f;
						enemyTank.position().x -= 0.1f;
					} else if (enemyTank.position().x >= 1.1f) {
						enemyTank.position().z += 0.1f;
						// objModel.position().x -= 0.1f;
					} else if (enemyTank.position().x <= 1.8f) {
						enemyTank.position().z += 0.1f;
						// objModel.position().x -= 0.1f;
					}

				}
			}

		} else if (x >= 700 && x <= 800 && y >= 380 && y <= 480) {
			// turretModel.rotation().y = angle;
			isTouch = true;

		}

		else if (objModel.position().x >= 1.55f)
			objModel.position().x = 1.55f;
		else if (objModel.position().z >= 2.3f)
			objModel.position().z = 2.3f;

		else {
			// isTouch = true;
		}
		/*
		 * if(x <= 400){ previousY = Math.abs(180 - y); if(previousY <= 90){
		 * //previousY = Math.abs(180 - y); objModel.rotation().y = 90 +
		 * previousY; } else{ //previousY = Math.abs(180-y);
		 * objModel.rotation().y = previousY; }
		 * 
		 * 
		 * 
		 * } else{
		 * 
		 * previousY = Math.abs(180 - y); if(previousY <= 90){
		 * 
		 * objModel.rotation().y = Math.abs(90 - previousY); } else{ //previousY
		 * = Math.abs(180-y); objModel.rotation().y = -previousY + 90; }
		 * 
		 * 
		 * }
		 */

		// objModel.rotation().y = 90 + previousY;

		return true;

	}

	public void detectCollision() {

	}
}